package com.lxf.cloudproduct.controller;

import com.alibaba.fastjson.JSONObject;
import com.lxf.cloudproduct.annotate.ProductRateLimit;
import com.lxf.cloudproduct.service.ProductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * @author 罗兴发
 * @data 2024/12/25 15:25
 * @description：商品-控制类
 */
@RestController
@CrossOrigin  //跨域
@RequestMapping("/v1")
@Slf4j
public class ProductController {
    @Resource
    ProductService productService;

    /**
     * 添加商品信息
     * @return
     */
    @PostMapping("/addProduct")
    public String addProduct(@RequestBody JSONObject json,HttpServletRequest request){
        return productService.addProduct(json,request);
    }

    /**
     * 添加商品描述信息，用以回答用户在线智能客服回答
     * 若是后续发展为商家入驻形式，该内容可省略
     * 亦可要求商家必须添加此数据信息
     * @return
     */
    @PostMapping("/addProductDesc")
    public String addProductDesc(@RequestBody JSONObject json,HttpServletRequest request){
        return productService.addProductDesc(json,request);
    }

    /**
     * 根据商品编码获取商品详情信息
     * @return
     */
    @PostMapping("/getProductByCode")
    public String getProductByCode(@RequestBody JSONObject json,HttpServletRequest request){
        return productService.getProductByCode(json,request);
    }

    /**
     * 根据商品编码列表获取商品详情信息列表
     * @return
     */
    @ProductRateLimit(value = 3, timeout = 5)
    @PostMapping("/findAllByGoodCodeIn")
    public String findAllByGoodCodeIn(@RequestBody JSONObject json){
        return productService.findAllByGoodCodeIn(json);
    }

    /**
     * 根据商品编码列表获取商品详情信息列表
     * @return
     */
    @PostMapping("/findAllByCLR")
    public String findAllByCLR(@RequestBody JSONObject json){
        return productService.findAllByCLR(json);
    }

    /**
     * 获取商品列表
     * @return
     */
    @PostMapping("/getProduct")
    @ProductRateLimit(value = 10,timeout = 60)
    public String getProduct(@RequestBody JSONObject json){
        return productService.getProduct(json);
    }

    /**
     * 根据商品编码更新商品库存（供其他服务使用）
     * @return
     */
    @PostMapping("/updateProductNumByCode")
    public void updateProductNumByCode(@RequestBody JSONObject json){
        productService.updateProductNumByCode(json);
    }
    /**
     * 根据商品编码更新商品信息
     * @return
     */
    @PostMapping("/updateProductByCode")
    public String updateProductByCode(@RequestBody JSONObject json,HttpServletRequest request){
        return productService.updateProductByCode(json,request);
    }

    /**
     * 根据商品编码更新商品图片
     * @return
     */
    @PostMapping("/updateProductImgByCode")
    public String updateProductImgByCode(@RequestBody JSONObject json,HttpServletRequest request){
        return productService.updateProductImgByCode(json,request);
    }

    /**
     * 根据商品编码获取商品图片
     * @return
     */
    @PostMapping("/getProductImgByCode")
    public String getProductImgByCode(@RequestBody JSONObject json){
        return productService.getProductImgByCode(json);
    }

    /**
     * 根据商品编码批量删除(多线程删除)
     * @return
     */
    @PostMapping("/deleteProductByCode")
    public String deleteProductByCode(@RequestBody JSONObject json){
        return productService.deleteProductByCode(json);
    }

    /**
     * 上传Excel解析成相应数据（多线程操作）
     * @return
     */
    @PostMapping("/uploadProduct")
    @ProductRateLimit(value = 3,timeout = 10)
    public String uploadProduct(@RequestParam MultipartFile file,HttpServletRequest request){
        return productService.uploadProduct(file,request);
    }

    /**
     * 推荐信息（包含商品等）
     * @return
     */
    @PostMapping("/recommendProduct")
    public String recommendProduct(@RequestBody JSONObject json,HttpServletRequest request){
        return productService.recommendProduct(json,request);
    }

    /**
     * 删除产品es数据
     * @return
     */
    @GetMapping("/deleteProductEsData")
    public String deleteProductEsData(){
        return productService.deleteProductEsData();
    }
}
